2024-10-25 Functional Programming in Lean
Adding a Reader to Any Monad
Combining IO and Reader - Functional Programming in Lean
ReaderT
ReaderTパターンとThree Layer Haskell Cakeから学ぶPureScriptのアプリケーション設計
code:lean
-- # Init.Prelude
/--
An implementation of Haskell's [ReaderT]. This is a monad transformer which
equips a monad with additional read-only state, of type ρ.
[ReaderT]: https://hackage.haskell.org/package/transformers-0.5.5.0/docs/Control-Monad-Trans-Reader.html#t:ReaderT
-/
def ReaderT (ρ : Type u) (m : Type u → Type v) (α : Type u) : Type (max u v) :=
ρ → m α
https://hackage.haskell.org/package/transformers-0.5.5.0/docs/Control-Monad-Trans-Reader.html#t:ReaderT
code:lean
-- # Init.Prelude
/-- Similar to MonadReaderOf, but ρ is an outParam for convenience. -/
class MonadReader (ρ : outParam (Type u)) (m : Type u → Type v) where
/-- (← read) : ρ reads the state out of monad m. -/
read : m ρ
確率のモナド
Giry monad in nLab
モナドは宇宙多相?
型強制(coercion)
code:lean
/--
A function for lifting a computation from an inner Monad to an outer Monad.
Like Haskell's [MonadTrans], but n does not have to be a monad transformer.
Alternatively, an implementation of [MonadLayer] without layerInvmap (so far).
[MonadTrans]: https://hackage.haskell.org/package/transformers-0.5.5.0/docs/Control-Monad-Trans-Class.html
[MonadLayer]: https://hackage.haskell.org/package/layers-0.1/docs/Control-Monad-Layer.html#t:MonadLayer
-/
class MonadLift (m : semiOutParam (Type u → Type v)) (n : Type u → Type w) where
/-- Lifts a value from monad m into monad n. -/
monadLift : {α : Type u} → m α → n α
MonadTrans
LawfulMonad
#ログ・記録・メモ